package com.allen.study.application.api.assembler.mapper;

import com.allen.study.application.api.request.EmployeeLoginCreateRequest;
import com.allen.study.application.api.request.EmployeeLoginQueryRequest;
import com.allen.study.application.api.request.EmployeeLoginUpdateRequest;
import com.allen.study.application.api.response.EmployeeLoginQueryResponse;
import com.allen.study.application.api.response.EmployeeLoginResponse;
import com.allen.study.domain.entity.EmployeeLogin;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 用户登录信息表数据传输对象结构映射
 *
 * @author AllenSun
 * @since 2025-03-15 13:57
 */
@Mapper
public interface IEmployeeLoginDTOStructMapper {

    /**
     * 用户登录信息表数据传输对象结构映射实例
     */
    IEmployeeLoginDTOStructMapper INSTANCE = Mappers.getMapper(IEmployeeLoginDTOStructMapper.class);

    /**
     * 用户登录信息表创建请求数据传输对象 转 用户登录信息表实体
     *
     * @param createRequest 用户登录信息表创建请求数据传输对象
     * @return 用户登录信息表实体
     */
    EmployeeLogin fromCreateRequest(EmployeeLoginCreateRequest createRequest);

    /**
     * 用户登录信息表更新请求数据传输对象 转 用户登录信息表实体
     *
     * @param updateRequest 用户登录信息表更新请求数据传输对象
     * @return 用户登录信息表实体
     */
    EmployeeLogin fromUpdateRequest(EmployeeLoginUpdateRequest updateRequest);

    /**
     * 用户登录信息表查询请求数据传输对象 转 用户登录信息表实体
     *
     * @param queryRequest 用户登录信息表查询请求数据传输对象
     * @return 用户登录信息表实体
     */
    EmployeeLogin fromQueryRequest(EmployeeLoginQueryRequest queryRequest);

    /**
     * 用户登录信息表实体 转 用户登录信息表响应数据传输对象
     *
     * @param employeeLogin 用户登录信息表实体
     * @return 用户登录信息表响应数据传输对象
     */
    EmployeeLoginResponse toResponse(EmployeeLogin employeeLogin);

    /**
     * 用户登录信息表实体 转 用户登录信息表查询响应数据传输对象
     *
     * @param employeeLogin 用户登录信息表实体
     * @return 用户登录信息表查询响应数据传输对象
     */
    EmployeeLoginQueryResponse toQueryResponse(EmployeeLogin employeeLogin);

    /**
     * 用户登录信息表实体列表 转 用户登录信息表查询响应数据传输对象列表
     *
     * @param employeeLoginList 用户登录信息表实体列表
     * @return 用户登录信息表查询响应数据传输对象列表
     */
    List<EmployeeLoginQueryResponse> toQueryResponse(List<EmployeeLogin> employeeLoginList);
}
